package com.bigbee.foundation;

import java.util.Collection;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;

/**
 * 栈
 * 存储一组元素，存取必须遵循:先进后出原则
 * java中的栈使用双端队列实现。
 * 
 * 作用:
 * 栈可以实现后退功能，当我们有需要实现一个具有后退
 * 功能的需求是，可以使用栈来保存每一步，然后实现。
 * @author Administrator
 *
 */
public class stack {
	public static void main(String[] args) {
		/*
		 * 双端队列,特点:
		 * 可以从队列两端进出队。
		 * 当我们只调用从一侧进出队的方法时，
		 * 就形成了栈的效果。
		 * 对此，java在双端队列中为栈的形式定义
		 * 了两个方法:
		 * push(入栈),pop(出栈)
		 */
		Deque<String> stack
			= new LinkedList<String>();
		
		stack.push("one");
		stack.push("two");
		stack.push("three");
		stack.push("four");
		
		System.out.println(stack);
		
		/*
		 * E pop()
		 * 获取栈顶元素(出栈)
		 * 当获取后，该元素即从栈中被删除
		 */
		String str = stack.pop();
		System.out.println(str);
		System.out.println(stack);
		
		/*
		 * E peek()
		 * 同样可以引用栈顶元素但不做出栈操作
		 */
		str = stack.peek();
		System.out.println(str);
		System.out.println(stack);
		
		/*
		 * 遍历
		 */
		while(stack.size()>0){
			str = stack.pop();
			System.out.println(str);
		}
		System.out.println(stack);
		
	}
}
